package com.english.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.english.entity.LessonLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 课时变动记录数据访问层
 *
 * @author wlq
 * @since 2025-08-05
 */
@Mapper
public interface LessonLogMapper extends BaseMapper<LessonLog> {

    /**
     * 根据学生ID查询课时变动记录
     * 
     * @param studentId 学生ID
     * @return 课时变动记录列表
     */
    List<LessonLog> selectByStudentId(@Param("studentId") Long studentId);

    /**
     * 插入课时变动记录
     * 
     * @param lessonLog 课时变动记录
     * @return 影响行数
     */
    int insert(LessonLog lessonLog);

    /**
     * 批量插入课时变动记录
     * 
     * @param lessonLogs 课时变动记录列表
     * @return 影响行数
     */
    int batchInsert(@Param("lessonLogs") List<LessonLog> lessonLogs);

    /**
     * 根据学生ID和类型查询课时变动记录
     * 
     * @param studentId 学生ID
     * @param type 变动类型
     * @return 课时变动记录列表
     */
    List<LessonLog> selectByStudentIdAndType(@Param("studentId") Long studentId, @Param("type") String type);

    /**
     * 根据时间范围查询课时变动记录
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 课时变动记录列表
     */
    List<LessonLog> selectByTimeRange(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据管理员ID查询课时变动记录
     * 
     * @param adminId 管理员ID
     * @return 课时变动记录列表
     */
    List<LessonLog> selectByAdminId(@Param("adminId") Long adminId);

    /**
     * 统计学生的课时变动次数
     * 
     * @param studentId 学生ID
     * @return 变动次数
     */
    Integer countByStudentId(@Param("studentId") Long studentId);

    /**
     * 查询最近的课时变动记录
     * 
     * @param limit 限制数量
     * @return 课时变动记录列表
     */
    List<LessonLog> selectRecentLogs(@Param("limit") Integer limit);

    /**
     * 根据变动类型统计记录数量
     * 
     * @param type 变动类型
     * @return 记录数量
     */
    Integer countByType(@Param("type") String type);
} 